/*-
* See the file LICENSE for redistribution information.
*
* Copyright (c) 2002-2006
* Sleepycat Software. All rights reserved.
*
* $Id: ThreadLocker.java,v 1.1 2006/05/06 08:59:09 ckaestne Exp $
*/
package com.sleepycat.je.txn;
import com.sleepycat.je.DatabaseException;
import com.sleepycat.je.dbi.EnvironmentImpl;
/**
* Extends BasicLocker to share locks among all lockers for the same thread.
* This locker is used when a JE entry point is called with a null transaction
* parameter.
*/
public class ThreadLocker extends BasicLocker {
/**
* Creates a ThreadLocker.
*/
public ThreadLocker(EnvironmentImpl env)
throws DatabaseException {
super(env);
}
/**
* Check that this txn is not used in the wrong thread.
*/
protected void checkState(boolean ignoreCalledByAbort)
throws DatabaseException {
if (thread != Thread.currentThread()) {
throw new DatabaseException("A per-thread transaction was" +
" created in " + thread +
" but used in " +
Thread.currentThread());
}
}
/**
* Creates a new instance of this txn for the same environment. No
* transactional locks are held by this object, so no locks are retained.
*/
public Locker newNonTxnLocker()
throws DatabaseException {
checkState(false);
return new ThreadLocker(envImpl);
}
/**
* Returns whether this locker can share locks with the given locker.
* Locks are shared when both are txns are ThreadLocker instances for the
* same thread.
*/
public boolean sharesLocksWith(Locker other) {
if (super.sharesLocksWith(other)) {
return true;
} else if (other instanceof ThreadLocker) {
return thread == ((ThreadLocker) other).thread;
} else {
return false;
}
}
}